#include <iostream>

// 服务端接口
class Server{
public:
    virtual ~Server() = default;
    virtual void request() = 0;
};

// 真实服务
class RealServer : public Server{
public:
    void request() override{
        std::cout << "RealServer request" << std::endl;
    }
};

// 代理服务器
class Proxy : public Server{
    RealServer *realServer;
public:
    Proxy() : realServer(nullptr){}
    ~Proxy(){
        delete realServer;
    }
    bool checkAccess(){
        std::cout << "Proxy check access" << std::endl;
        return true;
    }
    void request() override{
        if(!realServer){
            realServer = new RealServer();
        }
        if(checkAccess()){
            realServer->request();
        }
    }
};

int main()
{
    Proxy proxy; // 客户端直接操作代理
    // 第一次请求：代理会创建 RealServer 并检查权限
    proxy.request();
    // 第二次请求：直接复用已创建的 RealServer
    proxy.request();

    return 0;
}